﻿using Microsoft.Xna.Framework.Graphics;

namespace SuperRyoninRPG.Display
{
	public class Animation
	{
		private float frameTime;
		private readonly bool isLooping;
		private readonly Texture2D texture;
		private readonly int frameWidth;

		/// <summary>
		/// 新しいアニメーションを構築します。
		/// </summary>
		/// <param name="texture"></param>
		/// <param name="frameWidth">アスペクト比x/y</param>
		public Animation(Texture2D texture,int frameWidth, float frameTime, bool isLooping)
		{
			this.texture = texture;
			this.frameTime = frameTime;
			this.isLooping = isLooping;
			this.frameWidth = frameWidth;
		}

		/// <summary>
		///     アニメーション内のすべてのフレームは水平方向に
		///     配列されています。
		/// </summary>
		public Texture2D Texture
		{
			get { return this.texture; }
		}

		/// <summary>
		///     各フレームを表示する継続時間。
		/// </summary>
		public float FrameTime
		{
			get { return this.frameTime; }
			set { this.frameTime = value; }
		}

		/// <summary>
		///     アニメーションが最後に到達したときに、
		///     最初から再生を続行しますか?
		/// </summary>
		public bool IsLooping
		{
			get { return this.isLooping; }
		}

		/// <summary>
		///     アニメーション内のフレームの数を取得します。
		/// </summary>
		public int FrameCount
		{
			get { return this.Texture.Width / this.FrameWidth; }
		}

		/// <summary>
		///     アニメーション内のフレームの幅を取得します。
		/// </summary>
		public int FrameWidth
		{
			// フレームは正方形である
			// ものと想定します。
			get { return this.frameWidth; }
		}

		/// <summary>
		///     アニメーション内のフレームの高さを取得します。
		/// </summary>
		public int FrameHeight
		{
			get { return this.Texture.Height; }
		}
	}
}